/**
 * 
 */
package com.neusoft.cmsprojects.util;

import java.util.List;

import javax.annotation.Resource;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;

/**
 * index:		Dao层的集合类
 * @author guanhaimin
 * date:2014年12月16日下午2:33:33
 */
public class DaoUtilImpl implements DaoUtil{
	
	@Resource
	private HibernateTemplate hibernateTemplate;

	public HibernateTemplate getHibernateTemplate() {
		return hibernateTemplate;
	}

	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
	
	/**
	 * index:		保存数据
	 * @author guanhaimin
	 * @date 2014年12月16日 下午9:24:46
	 * @param obj void
	 */
	public void save(Object obj) {
		try {
			this.hibernateTemplate.save(obj);
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	/**
	 * index:获取数据
	 * @author guanhaimin
	 * @date 2014年12月16日 下午9:25:40
	 * @return Object
	 */
	public List<Object> queryByHql(String hql){
		List<Object> objs = this.hibernateTemplate.find(hql);
		return objs;
	}

	@Override
	public void delete(Object obj) {
			this.hibernateTemplate.delete(obj);
	}

	@Override
	public void update(Object obj) {
		this.hibernateTemplate.update(obj);
	}

	@Override
	public void merge(Object obj) {
		this.hibernateTemplate.merge(obj);
	}

	@Override
	public List<Object> queryByPage(String hql, int currentPage, int pageSize) {
		// TODO Auto-generated method stub
		Session session = hibernateTemplate.getSessionFactory().openSession();
		session.beginTransaction();
		Query q = session.createQuery(hql);
		q.setFirstResult((currentPage-1)*pageSize);   
		q.setMaxResults(pageSize);   
		List<Object> objs = q.list();   
		session.getTransaction().commit();
		session.close();
		return objs;
	}

	@Override
	public int getTotalCountBySql(String sql) {
		// TODO Auto-generated method stub
		Session session = hibernateTemplate.getSessionFactory().openSession();
		session.beginTransaction();
		int count = ((Long) session.createQuery(sql).uniqueResult()).intValue();
		session.getTransaction().commit();
		session.close();
		return count;
	}

	@Override
	public Object getById(String hql) {
		// TODO Auto-generated method stub
		Session session = hibernateTemplate.getSessionFactory().openSession();
		session.beginTransaction();
		Object obj = session.createQuery(hql).uniqueResult();
		return obj;
	}
}
